package com.capgemini.cn.authority.core.automation;

import com.capgemini.cn.authority.data.enums.AuthorityType;

import java.lang.annotation.Documented;
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;

/**
 * <p>用以标识授权管控的注解，目前支持JBoss Resteasy和Spring MVC</p>
 * <p>通过该注解管理的权限和资源都会放到默认资源组和权限类型中，无法手动管理</p>
 * Created at 2017/9/27
 *
 * @author Andriy
 */
@Target(value = {
        ElementType.METHOD
})
@Retention(RetentionPolicy.RUNTIME)
@Documented
public @interface Authorize {

    /**
     * 权限类型
     */
    AuthorityType type() default AuthorityType.HTTP;

    /**
     * 名称，用以标识权限和对应资源的名字
     */
    String name();

    /**
     * 权限编码，用以在授权用户组时的标识，必须保持全局唯一
     */
    String code();

    /**
     * 资源组信息，用以标识当前资源所存放的资源组
     */
    String groups() default "";

    /**
     * 资源值，用以权限校验时判断该资源的访问是否被授权
     * <p>对于权限类型为{@link AuthorityType}.HTTP的权限，该值通常设置为请求的URL地址</p>
     */
    String assetValue();

    /**
     * 是否自动注册资源，默认值为true
     */
    boolean autoRegister() default true;
}
